home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Tool Chest / Text / WASTE / WASTE 1.1.2 Distribution / Demo Source / DialogUtils.p next >
Encoding:
Text File  |  1995-10-12  |  3.3 KB  |  122 lines  |  [TEXT/CWIE]

  1. unit DialogUtils;
  2.  
  3. { WASTE DEMO PROJECT: }
  4. { Dialog Utilities }
  5.  
  6. { Copyright © 1993-1995 Marco Piovanelli }
  7. { All Rights Reserved }
  8.  
  9. interface
  10.     uses
  11.         Dialogs;
  12.  
  13.     function GetMyStandardDialogFilter: ModalFilterUPP;
  14.  
  15.     function GetDialogItemType (dialog: DialogRef;
  16.                                     item: Integer): Integer;
  17.     function GetDialogItemHandle (dialog: DialogRef;
  18.                                     item: Integer): Handle;
  19.     procedure GetDialogItemRect (dialog: DialogRef;
  20.                                     item: Integer;
  21.                                     var itemRect: Rect);
  22.     procedure SetDialogItemProc (dialog: DialogRef;
  23.                                     item: Integer;
  24.                                     proc: UserItemUPP);
  25.  
  26. implementation
  27.  
  28.     procedure DoWindowEvent ({const} var event: EventRecord);
  29.     external;        { defined in DemoEvents.p }
  30.  
  31.     function MyStandardDialogFilter (dialog: DialogRef;
  32.                                     var event: EventRecord;
  33.                                     var item: Integer): Boolean;
  34.         var
  35.             savePort: GrafPtr;
  36.             standardFilter: ProcPtr;
  37.     begin
  38.         MyStandardDialogFilter := false;
  39.  
  40. { set up thePort }
  41.         GetPort(savePort);
  42.         SetPort(dialog);
  43.  
  44. { intercept window events directed to windows behind the dialog }
  45.         if (event.what in [updateEvt, activateEvt]) then
  46.             if (DialogRef(event.message) <> dialog) then
  47.                 DoWindowEvent(event);
  48.  
  49. { is the default item a pushbutton? }
  50.         if (GetDialogItemType(dialog, DialogPeek(dialog)^.aDefItem) = kButtonDialogItem) then
  51.  
  52. { yes, so tell the Dialog Manager to care about its outline }
  53.             if (SetDialogDefaultItem(dialog, DialogPeek(dialog)^.aDefItem) <> noErr) then
  54.                 ;
  55.  
  56. { call the standard Dialog Manager filter procedure }
  57.         if (GetStdFilterProc(standardFilter) = noErr) then
  58.             MyStandardDialogFilter := CallModalFilterProc(dialog, event, item, standardFilter);
  59.  
  60. { restore thePort }
  61.         SetPort(savePort);
  62.  
  63.     end;  { MyStandardDialogFilter }
  64.  
  65.     var
  66.  
  67. { static variable for GetMyStandardDialogFilter }
  68.         sMyStandardDialogFilterProc: ModalFilterUPP;
  69.  
  70.     function GetMyStandardDialogFilter: ModalFilterUPP;
  71.     begin
  72.         if (sMyStandardDialogFilterProc = nil) then
  73.             sMyStandardDialogFilterProc := NewModalFilterProc(@MyStandardDialogFilter);
  74.         GetMyStandardDialogFilter := sMyStandardDialogFilterProc;
  75.     end;  { GetMyStandardDialogFilter }
  76.  
  77.     function GetDialogItemType (dialog: DialogRef;
  78.                                     item: Integer): Integer;
  79.         var
  80.             itemType: Integer;
  81.             itemHandle: Handle;
  82.             itemRect: Rect;
  83.     begin
  84.         GetDialogItem(dialog, item, itemType, itemHandle, itemRect);
  85.         GetDialogItemType := itemType;
  86.     end;  { GetDialogItemType }
  87.  
  88.     function GetDialogItemHandle (dialog: DialogRef;
  89.                                     item: Integer): Handle;
  90.         var
  91.             itemType: Integer;
  92.             itemHandle: Handle;
  93.             itemRect: Rect;
  94.     begin
  95.         GetDialogItem(dialog, item, itemType, itemHandle, itemRect);
  96.         GetDialogItemHandle := itemHandle;
  97.     end;  { GetDialogItemHandle }
  98.  
  99.     procedure GetDialogItemRect (dialog: DialogRef;
  100.                                     item: Integer;
  101.                                     var itemRect: Rect);
  102.         var
  103.             itemType: Integer;
  104.             itemHandle: Handle;
  105.     begin
  106.         GetDialogItem(dialog, item, itemType, itemHandle, itemRect);
  107.     end;  { GetDialogItemRect }
  108.  
  109.     procedure SetDialogItemProc (dialog: DialogRef;
  110.                                     item: Integer;
  111.                                     proc: UserItemUPP);
  112.         var
  113.             itemType: Integer;
  114.             itemHandle: Handle;
  115.             itemRect: Rect;
  116.     begin
  117.         GetDialogItem(dialog, item, itemType, itemHandle, itemRect);
  118.         if (BAND(itemType, $007F) = userItem) then
  119.             SetDialogItem(dialog, item, itemType, Handle(proc), itemRect);
  120.     end;  { SetDialogItemProc }
  121.  
  122. end.